package com.googlecode.lemyriapode.regle;

import com.googlecode.lemyriapode.type.Echiquier;
import static com.googlecode.lemyriapode.type.Echiquier.*;
import static com.googlecode.lemyriapode.type.Echiquier.Case.*;
import static com.googlecode.lemyriapode.regle.Position.Piece.*;
import com.googlecode.lemyriapode.type.Echiquier.Direction;
import java.util.HashMap;
import java.util.Map;

/**
 * Définition d'une position au jeu d'échecs
 * L'entrée de main()
 * @author Gilles
 */
public class Position {

    final static boolean trait_aux_blancs = true;
    final static boolean trait_aux_noirs = false;
    final static boolean blanc = true;
    final static boolean noir = false;
    public boolean trait;
    public Map<Case, Piece> posCourante;
    public Echiquier echiquier;

    /**
     * Les Pieces :
     * couleur,règle de leur mouvement, n_case(true) ou 1_case
     */
    public enum Piece {

        tour_b(blanc, HV, true),
        tour_n(noir, HV, true),
        cavalier_b(blanc, Cavalier, false),
        cavalier_n(noir, Cavalier, false),
        fou_b(blanc, D, true),
        fou_n(noir, D, true),
        dame_b(blanc, HVD, true),
        dame_n(noir, HVD, true),
        roi_b(blanc, HVD, false),
        roi_n(noir, HVD, false),
        pion_b(blanc, Pion, false),
        pion_n(noir, Pion, false);
        public boolean couleur;
        public Direction[] Regle_Mouvt;
        public boolean _NCase;

        private Piece(boolean Couleur, Direction[] Regle_Mouvt, boolean NCase) {
            this.couleur = Couleur;
            this.Regle_Mouvt = Regle_Mouvt;
            this._NCase = NCase;
        }
    }

    /**
     * Echiquier posCourante
     */
    public Position() {
        trait = trait_aux_blancs;
        echiquier = new Echiquier();
        posCourante = new HashMap<Case, Piece>(64);
        posCourante.put(a1, tour_b);
//        posCourante.put(b1, cavalier_b);
        posCourante.put(c1, fou_b);
        posCourante.put(d1, dame_b);
        posCourante.put(e1, roi_b);
        posCourante.put(f1, fou_b);
//        posCourante.put(g1, cavalier_b);
        posCourante.put(h1, tour_b);

    }

    public Position(Case _case, Direction dir) {
        echiquier = new Echiquier(_case, dir);

    }

    public Piece getPiece(Case _c) {
        return posCourante.get(_c);

    }
}
